<?php
/**
 * Created by PhpStorm.
 * User: L:RChang
 * Date: 2018/6/12
 * Time: 13:42
 * Mail:hjklrchang@qq.com
 */

namespace app\adminapi\controller;

use app\adminapi\validate\UserValidate;

/**
 * @name【用户管理】
 * @baseurl【adminapi/User】
 * @file【User.php】
 */
class User extends Base
{
    /**
     * @name【用户列表】
     * @desc【用户列表】
     * @uri【userList】
     * @method【post】
     * @param【
     * token $ string $ abc $ 验证字符 $ 1 #
     * uid $ int $ 1 $ 用户id $ 1 #
     * fields $ string $ driver_id,name $ 字段名称 #
     * where_json $ json $ {"order_id":["in","6,7,8"],"name":["like","%王%"]} $ 查询条件 #
     * page $ int $ 1$ 页数 #
     * pagenum $ int $ 10 $记录数
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     * @return \think\response\Json
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function userList(){
        // 校验请求参数
        $validate = new UserValidate();
        // 获取所有请求参数
        $params = $validate->scene('list')->goCheck()->getCurrentData();

        $where = json_decode($params['where_json'], true);

        $result =( new \app\adminapi\model\User())
            ->listData($where, $params['fields'], $params['page'], $params['pagenum']);

        return $this->retSucc($result);
    }

    /**
     * @name【新增用户】
     * @desc【新增用户】
     * @uri【add】
     * @method【post】
     * @param【
     * username $ string $ 王小明 $ 用户名称 $ 1 #
     * password $ string $ xxxxxx$  密码 $ 1 #
     * mobile $ string $  xxxxxxx $  手机号 $ 1 #
     * company_id $ int $  10 $  单位id  #
     * area_id $ int $  4 $  区域id  #
     * role_id $ string $  1,2 $  角色id，多个以英文逗号分隔 $ 1  #
     * state $ int $  1 $ 状态，1：可用，9：禁用 $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * user_id $ int $ 1 $ 新增成功的用户ID#
     * 】
     * @return mixed|\think\response\Json|void
     * @throws \app\base\exception\BaseException
     * @throws \app\base\exception\RecordNotFoundException
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function add(){
        // 校验请求参数
        $validate = new UserValidate();
        // 获取所有请求参数
        $params = $validate->scene('add')->goCheck()->getCurrentData();

        $user = (new \app\adminapi\model\User()) ->createOrUpdate($params);

        return $this->retSucc(['user_id' => $user->user_id]);
    }

    /**
     * @name【编辑用户】
     * @desc【编辑用户】
     * @uri【edit】
     * @method【post】
     * @param【
     * user_id $ int $ 1 $ 用户id $ 1 #
     * username $ string $ 王小明 $ 用户名称 $ 1 #
     * password $ string $ xxxxxx$  密码   #
     * mobile $ string $  xxxxxxx $  手机号 $ 1 #
     * company_id $ int $  10 $  单位id  #
     * area_id $ int $  4 $  区域id  #
     * role_id $ string $  1,2 $  角色id，多个以英文逗号分隔 $ 1  #
     * state $ int $  1 $ 状态，1：可用，9：禁用 $ 1  #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * updated $ int $  1 $ 更新记录条数#
     * 】
     * @return mixed|\think\response\Json|void
     * @throws \app\base\exception\BaseException
     * @throws \app\base\exception\RecordNotFoundException
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function edit(){
        // 校验请求参数
        $validate = new UserValidate();
        // 获取所有请求参数
        $params = $validate->scene('edit')->goCheck()->getCurrentData();

        $result = (new \app\adminapi\model\User()) ->createOrUpdate($params);

        return $this->retSucc(['updated' => $result]);
    }

    /**
     * @name【删除用户】
     * @desc【删除用户】
     * @uri【delete】
     * @method【post】
     * @param【
     * user_ids $ int $ 1 $ 用户ID，多个请用','号连接 $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * deleted $ int $  1 $ 删除的记录条数#
     * 】
     */
    public function delete(){
        // 校验请求参数
        $validate = new UserValidate();
        // 获取所有请求参数
        $params = $validate->scene('delete')->goCheck()->getCurrentData();

        $where = [
            'user_id' => ['IN', explode(',', $params['user_ids'])]
        ];

        $buildQuery = function($query) use ($where) {
            \app\adminapi\model\Common::authCompanyQuery($query, $where, 'company_id', null, true);
        };

        $result = \app\adminapi\model\User::destroy($buildQuery);

        return $this->retSucc(['deleted' => $result]);
    }
}